package utils;

import java.util.ArrayList;
import java.util.List;

import controladores.ControladorCaracteristicas;

import entidades.Caracteristica;

import interfaces.PostSeleccion;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.util.Log;
import android.widget.Toast;

public class SelectorCaracteristicas extends BaseAsync
{
	private Context context;
	private PostSeleccion postSeleccion;
	private List<Caracteristica> caracteristicas;
	
	public SelectorCaracteristicas (Context context, PostSeleccion postSeleccion)
	{
		super (context, "Cargando...");
		
		this.context = context;
		this.postSeleccion = postSeleccion;
	}

	@Override
	protected Void doInBackground(Void... arg0)
	{
//		Caracteristica ca1 = new Caracteristica("Fumador.", "");
//		Caracteristica ca2 = new Caracteristica("Aclimatado.", "");
//		
//		List<Caracteristica> car = new ArrayList<>();
//		car.add(ca1);
//		car.add(ca2);
//		
//		caracteristicas = car;
		caracteristicas = new ControladorCaracteristicas().getCaracteristicas();
		
		return null;
	}
	
	@Override
	protected void onPostExecute(Void result)
	{
		super.onPostExecute(result);
		
		if (caracteristicas != null)
			mostrarDialogo();
		else
			Toast.makeText(context, "Fallo.", Toast.LENGTH_SHORT).show();
	}
	
	private void mostrarDialogo ()
	{
		Log.i("LOG", "Dialogo! Tam: " + caracteristicas.size());
		final List<Integer> seleccion = new ArrayList<>();
		final CharSequence[] nombresCaracteristicas = caracteristicasACharSequence(caracteristicas);

		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		
		// Titulo del dialogo.
		builder.setTitle("Caracteristicas")
				// Array con la seleccion, en este caso los nombres de las caracteristicas.
				.setMultiChoiceItems(nombresCaracteristicas, null,
						new DialogInterface.OnMultiChoiceClickListener()
						{
							@Override
							public void onClick(DialogInterface dialog,
									int which, boolean isChecked)
							{
								if (isChecked)
								{
									// Si el usuario selecciona la caracteristica, agregar
									// la posicion al arreglo de selecciones.
									seleccion.add(which);
								} else if (seleccion.contains(which))
								{
									// Si el usuario de-selecciona la caracteristica, quitar
									// la posicion del arreglo de selecciones.
									seleccion.remove(Integer.valueOf(which));
								}
							}
						})
				// Botones.
				.setPositiveButton("Aceptar",
						new DialogInterface.OnClickListener()
						{
							@Override
							public void onClick(DialogInterface dialog, int id)
							{
								postSeleccion.postSeleccion(getSeleccion(caracteristicas, seleccion));
							}
						})
				.setNegativeButton("Cancelar",
						new DialogInterface.OnClickListener()
						{
							@Override
							public void onClick(DialogInterface dialog, int id)
							{
								dialog.dismiss();
							}
						});

		builder.create().show();
	}
	
	private CharSequence[] caracteristicasACharSequence (List<Caracteristica> caracteristicas)
	{
		CharSequence seq [] = new String [caracteristicas.size()];
		
		for (int i = 0; i < caracteristicas.size(); i++)
			seq[i] = caracteristicas.get(i).getNombre();
		
		return seq;
	}
	
	private List<Caracteristica> getSeleccion (List<Caracteristica> caracteristicas, List<Integer> pos)
	{
		List<Caracteristica> seleccion = new ArrayList<>();
		
		for (Integer i : pos)
			seleccion.add(caracteristicas.get(i));
		
		return seleccion;
	}
}
